/*Copyright (C) 2009 - 2011 MASSART GAUTHIER

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#include "../headers.h"

void morp_jeu(short mode) {
	short continuer = 0, choix = 0;
	char *contenu_titre = "MORPION", prenom_2[100];

	afficher_titre(contenu_titre);
	CSLP_ColorText(CT);
	get_player_name(0, prenom);

	if(mode == 2) {
		get_player_name(2, prenom_2);
	}
	else {
		strcpy(prenom_2, "L'ordinateur");
	}

	clear();

	while(continuer != 2) {
		short touche_appuyee = 0, niveau = 0;
		short quitter = 1, Joueur = random(1, 2), tour = 0, gagne = 0;
		bool faute = false;

		char matrice[10] = {
			' ',
			' ', ' ', ' ',
			' ', ' ', ' ',
			' ', ' ', ' ',
		};

		if(mode == 1) {
			niveau = afficher_menu("Niveau 1\nNiveau 2\nNiveau 3\n", "Sélectionnez votre niveau:\n", contenu_titre);
			clear();
		}

		while(quitter != 0) {
			faute = false;

			afficher_titre(contenu_titre);
			morp_affichage_fond(matrice);

			if(Joueur == 1) {
				CSLP_ColorText(COLOR_RED);
				move(31, 0);
				afficher_centre(prenom);
				CSLP_ColorText(CT);
				afficher_centre("à vous de jouer!!");
				CSLP_ColorText(COLOR_WHITE);
			}
			else if(Joueur == 2) {
				CSLP_ColorText(COLOR_RED);
				move(31, 0);
				afficher_centre(prenom_2);
				CSLP_ColorText(CT);
				if(mode == 1) {
					afficher_centre("sélectionne une case.");
					refresh();
					CSLP_Sleep(1000);
				}
				else if(mode == 2) {
					afficher_centre("à vous de jouer!!");
				}
				CSLP_ColorText(COLOR_WHITE);
			}

			if(Joueur == 1) {
				touche_appuyee = getch();
			}
			else {
				if(mode == 1) {
					if(niveau == 1) {
						touche_appuyee = morp_IA_1(matrice);
					}
					else if(niveau == 2) {
						touche_appuyee = morp_IA_2(matrice);
					}
					else if(niveau == 3) {
						touche_appuyee = morp_IA_3(matrice);
					}
				}
				else if(mode == 2) {
					touche_appuyee = getch();
				}
			}

			if(Joueur == 1 && touche_appuyee != '0') {

				touche_appuyee -= '0';

				if(touche_appuyee < 0 || touche_appuyee > 9) {
					move(31, 0);
					CSLP_ColorText(COLOR_RED);
					afficher_centre("Vous devez entrer un chiffre entre 1 et 9 !");
					Joueur--;
					tour--;
					CSLP_ColorText(COLOR_WHITE);
					refresh();
					afficher_temps(35, 'm', 1, 1500);
				}
				else {
					if(matrice[touche_appuyee] == ' ') {
						matrice[touche_appuyee] = 'X';
						jouer_son(CROIX);
					}
					else {
						faute = true;
					}
				}

				Joueur++;
				CSLP_Sleep(150);
			}
			else if(Joueur == 2 && touche_appuyee != '0') {

				touche_appuyee -= '0';

				if(touche_appuyee < 0 || touche_appuyee > 9) {
					move(31, 0);
					CSLP_ColorText(COLOR_RED);
					afficher_centre("Vous devez entrer un chiffre entre 1 et 9 !");
					Joueur++;
					tour--;
					CSLP_ColorText(COLOR_WHITE);
					refresh();
					afficher_temps(35, 'm', 1, 1500);
				}
				else {
					if(matrice[touche_appuyee] == ' ') {
						matrice[touche_appuyee] = 'O';
						jouer_son(CROIX);
					}
					else {
						faute = true;
					}
				}

				Joueur--;

				CSLP_Sleep(150);
			}
			else if(touche_appuyee == '0') {
				clear();
				choix = afficher_menu("Oui\nNon\n", "Voulez-vous quitter la partie en cours ?\n", "____─'PAUSE'─____");
				CSLP_ColorText(CT);
				clear();

				if(choix == 1) {
					quitter = 0;
				}
				else {
					tour--;
				}
			}
			else {
				tour--;
			}

			if(faute) {
				move(31, 0);
				CSLP_ColorText(COLOR_RED);
				afficher_centre("Cette case est déjà occupée! Veuillez rejouer.");

				if(Joueur == 2)
					Joueur--;
				else
					Joueur++;

				tour--;
				CSLP_ColorText(COLOR_WHITE);
				refresh();
				afficher_temps(35, 'm', 1, 1500);
			}

			if(gagne == 0) {
				gagne = morp_verif_gagne(matrice);
			}

			if(gagne != 0) {

				if(gagne == 1) {
					if(mode == 1) {
						gagner();
						CSLP_ColorText(COLOR_WHITE);
						morp_affichage_fond(matrice);
					}

					CSLP_ColorText(COLOR_RED);
					move(31, 0);
					afficher_centre(prenom);
					CSLP_ColorText(CT);
					afficher_centre("a gagné !");
					CSLP_ColorText(COLOR_WHITE);
				}
				else {
					if(mode == 1) {
						perdu();
						afficher_titre(contenu_titre);
						morp_affichage_fond(matrice);
					}

					CSLP_ColorText(COLOR_RED);
					move(31, 0);
					afficher_centre(prenom_2);
					CSLP_ColorText(CT);
					afficher_centre("à gagné!");
					CSLP_ColorText(COLOR_WHITE);
				}

				quitter = 0;

				getch();
			}

			tour++;

			if(tour == 9 && gagne != 1) {
				clear();
				afficher_titre(contenu_titre);
				CSLP_ColorText(COLOR_WHITE);
				morp_affichage_fond(matrice);
				CSLP_ColorText(COLOR_RED);
				move(31, 0);
				afficher_centre("PARTIE NULLE...");
				CSLP_ColorText(COLOR_WHITE);
				quitter = 0;
				getch();
			}

			clear();

		}

		continuer = afficher_menu_recommencer(contenu_titre);

		clear();
	}
}
